/************************************************************************
** 文  件：
**	FileUtil.h
** 功  能：
**	封装了对系统文件处理功能
** 作  者：
**	email:lixx2048@163.com
**  wechat:lixiang6153
**  QQ:941415509
** 日  期：
**	2024/03/15	14:00:00
** 说  明：
**	无
** 版  本：
**	2024/03/15	14:00:00		1.0		lixx2048@163.com
/************************************************************************/
#pragma once
#include <string>
#include <fstream>
#include <sstream>
#include <boost/serialization/singleton.hpp>
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>

class FileUtil
	: public boost::serialization::singleton<FileUtil>
{
public:
	FileUtil();
	virtual ~FileUtil();

public:
	// 文件或目录是否存在
	static bool Exists(std::string path);
	// 判断路径是否为目录
	static bool IsDir(std::string path);
	// 级联创建系统目录
	static bool Mkdirs(std::string path);
	// 删除指定目录
	static bool RemoveDirs(std::string dir);
	// 删除文件
	static bool RemoveFile(std::string file);
	// 获取当前工作目录
	static std::string GetAppPath(std::string path);
	// 获取文件标题
	static std::string GetFileName(std::string path);
	// 获取文件大小
	static unsigned long long GetFileSize(std::string file);
	// 获取目录文件列表
	static void GetCurDirFileList(std::string dir, std::vector<std::string>& list);
	// 循环获取目录文件列表
	static void GetRecursiveFileList(std::string dir, std::vector<std::string>& list);
	// 读取文件到缓存
	static bool ReadFile(std::string file, unsigned char* buf, unsigned long long size);
	// 读取文本文件
	static std::string ReadText(std::string file);
	// 读取二进制文件
	static std::string Read(std::string file);
	// 写内容到文件
	static bool Write(std::string file, std::string& content);
	// 获取磁盘空间大小
	static unsigned long long GetDiskAvailableSpace(std::string dir);
	static unsigned long long GetDiskCapacitySpace(std::string dir);
	static unsigned long long GetDiskFreeSpace(std::string dir);
};